import vnode  from "./vnode.js" // 1. 引入vnode模块
// 传入的参数必须满足以下条件：
// 1. 必须有三个,否则报错
// 2. 满足以下三种情况
// h('div',{},"hhh")
// h('div',{},[])
// h('div',{},h('span',{}))
export default function h(sel, data, c) {
    // 开写
    if (arguments.length < 3) {
        throw new Error('低配h函数')
    }
    // 情况1
    if (typeof c === 'string' || typeof c === 'number') {
        return vnode(sel, data, undefined, c, undefined)
    } else if(Array.isArray(c)) { // 情况2
        // 遍历查看数组中是不是都是h函数返回的vnode
        for (let i = 0; i < c.length; ++i) {
            if (!(typeof c[i] === 'object' && c[i].hasOwnProperty('sel'))) {
                throw new Error('数组参数错误')
            }
        }
        return vnode(sel, data, c, undefined, undefined)
    } else if(typeof c === 'object' && c.hasOwnProperty('sel')) { // 情况3
        return vnode(sel, data, [c], undefined, undefined)
    } else {
        throw new Error('h函数参数错误')
    }
}